#include "game.h"

int x = 0;
int y = 0;
void Menu()
{
  printf("####################\n");
  printf("####  1. start  ####\n");
  printf("####  0. exit   ####\n");
  printf("####################\n");
  printf("Please Select :");
}

int ChessCount(int board[][COL], int row, int col, enum dir d)
{
  int _x = x - 1;
  int _y = y - 1;

  int count = 0;
  while(1)
  {
    switch(d){
      case LEFT:
        _y--;
        break;
      case RIGHT:
        _y++;
        break;
      case UP:
        _x--;
        break;
      case DOWN:
        _x++;
        break;
      case LEFT_UP:
        _x--;
        _y--;
        break;
      case LEFT_DOWN:
        _x++;
        _y--;
        break;
      case RIGHT_UP:
        _x--;
        _y++;
        break;
      case RIGHT_DOWN:
        _x++;
        _y++;
        break;
      default:
        printf("Trying Again!\n");
        break;
    }
    if(x < 0 || x > row || y < 0 || y > col){
      break;
    }

    if(board[x-1][y-1] == board[_x][_y])
    {
      count++;
    }
    else
    {
      break;
    }
  }
   return count; 
}

int ISover(int board[][COL], int row, int col)
{
  int count1 = ChessCount(board, row, col, LEFT)+ChessCount(board, row, col, RIGHT) + 1;
  int count2 = ChessCount(board, row, col, UP)+ChessCount(board, row, col, DOWN) + 1;
  int count3 = ChessCount(board, row, col, LEFT_UP)+ChessCount(board, row, col, LEFT_DOWN) + 1;
  int count4 = ChessCount(board, row, col, RIGHT_UP)+ChessCount(board, row, col, RIGHT_DOWN) + 1;

  if(count1 >= 5 || count2 >=5 || count3 >= 5 || count4 >= 5)
  {
    if(board[x-1][y-1] == Player1)
    {
      return PLAYER1_WIN;
    }
    else{
      return PLAYER2_WIN;
    }
  }

   int i = 0;
   for(;i < row;i++){
     int j = 0;
     for(;j < col;j++)
     {
       if(board[i][j] == 0)
         return NEXT;
     }
   }
     
  return DRAW;

}

void showBoard(int board[][COL], int row, int col)
{
  printf("\e[1;1H\e[2J");
  printf("  ");
  int i = 1;
  for(;i <= col;i++)
  {
    printf("%3d",i);
  }
  printf("\n");

  i = 0;
  for(;i < row;i++){
      int j = 0;
      printf("%2d ",i + 1);
      for(;j < col;j++){
        if(board[i][j] == 0)
        {
          printf(" . ");
        }
        else if(board[i][j] == Player1)
        {
          printf(" ● ");
        }
        else
        {
          printf(" ♡ ");
        }
      }
      printf("\n");
   }
}

void PlayerMove(int board[][COL], int row, int col, int who)
{ 
   while(1)
   {
      printf("Player[%d] Please Enter your pos\n",who);
      scanf("%d %d",&x,&y);
      if(x < 1 || x > row || y < 1 || y > col){
        printf("Pos Is not Right!\n");
        continue;
      }
      else if(board[x-1][y-1] != 0)
      {
        printf("Pos Is Occipied!\n");
        continue;
      }
      else
      {
      board[x-1][y-1] = who;
      break;
      }

   }
}


void Game()
{
  int board[ROW][COL];
  memset(board,0,sizeof(board));
  int result = NEXT;
  do{
    showBoard(board,ROW,COL);
    PlayerMove(board,ROW,COL,Player1);
    result = ISover(board,ROW,COL);
    
    if(NEXT != result)
    {
       break;
    }

    showBoard(board,ROW,COL);
    PlayerMove(board,ROW,COL,Player2);
    result = ISover(board,ROW,COL);

    if(NEXT != result)
    {
      break;
    }
  }while(1);

  switch(result)
  {
    case PLAYER1_WIN:
         printf("恭喜用户 1 赢得游戏！\n");
         break;
    case PLAYER2_WIN:
         printf("恭喜用户 2 赢得游戏！\n");
         break;
    case DRAW:
         printf("平局！\n");
         break;
    default:
         break;
  }
  showBoard(board,ROW,COL);
}
